home *** CD-ROM | disk | FTP | other *** search
- Path: uunet!munnari!sources-request
- From: sources-request@munnari.oz
- Newsgroups: comp.sources.unix
- Subject: v11i029: MUSBUS 5.0 -- Monash University Benchmark, Part01/04
- Message-ID: <1825@munnari.oz>
- Date: 17 Sep 87 08:12:21 GMT
- Sender: kre@munnari.oz
- Lines: 1884
- Approved: kre@munnari.oz.au
-
- Submitted by: kenj@moncsbruce.oz.au (Ken McDonell)
- Mod.sources: Volume 11, Issue 29
- Archive-name: musbus/Part01
-
- [ This posting is way out of sequence with the rest of what's
- happening in comp.sources.unix. Sorry about that folks...
- It was caused by a procedural screwup .. the numbers were
- allocated way before the posting was ready. So much for
- attempting to streamline the posting process! I think that
- r$ and I have this dual moderator stuff in a much nicer state
- now... kre ]
-
- MUSBUS Version 5.0 (Monash University Software for Benchmarking Unix Systems)
-
- MUSBUS is a benchmarking tool that provides a test environment in which
- a system or application specific worload profile is used to drive simulated
- multi-user performance measurements; i.e. system throughput as seen by
- a terminal user as a function of concurrent load. Some raw speed tests are
- also included for diagnostic and hypothesis formulation purposes.
-
- MUSBUS has been used successfully in Australia, Europe and the USA
- by equipment purchasers for comparative performance evaluation, in
- contractual acceptance tests, system shake-down to introduce stress
- and by vendors for in-house performance instrumentation.
-
- A paper at the June 1987 Phoenix USENIX Meeting describes the philosophy
- underlying the MUSBUS design.
-
- Complete documentation is in Intro.nr (no macros needed), whilst
- musbus.1 and README provide abbreviated notes, hints and descriptions.
-
- Ken J. McDonell
- Department of Computer Science
- Monash University
- kenj@moncsbruce.oz.au ..!uunet!munnari!moncsbruce.oz!kenj
-
- #! /bin/sh
- # This is a shell archive, meaning:
- # 1. Remove everything above the #! /bin/sh line.
- # 2. Save the resulting text in a file.
- # 3. Execute the file with /bin/sh (not csh) to create the files:
- # Adjust
- # BSDtime.awk
- # Config
- # Groan
- # Intro.nr
- # Makefile
- # Makefile,1
- # README
- # Results.files
- # SysVtime.awk
- # Tools.files
- # Workload.files
- # arith.c
- # This archive created: Thu Sep 17 06:46:18 EST 1987
- export PATH; PATH=/bin:$PATH
- echo 'x - Adjust'
- if test -f 'Adjust'
- then
- echo 'shar: over-writing existing file Adjust'
- fi
- sed 's/^X//' > Adjust <<'End-of-File-Grunt'
- X#! /bin/sh
- X# $Header: Adjust,v 1.2 87/06/23 15:05:56 kjmcdonell Beta $
- Xif test $# -lt 1
- Xthen
- X echo Usage: $0 logfile ...
- X exit 1
- Xfi
- Xfor f
- Xdo
- X awk '
- X/sqrt/ { print $0; flag=0; state=0; next }
- X/Arith/ && /arithoh/ { state=1; print $0; next }
- X/Elapse/ && state==1 { state=2; e=$3; print $0; next }
- X/CPU/ && state==2 { state=3; c=$3; print $0; next }
- X/Arith/ && state==3 { flag=1; print $0; next }
- X/Elapse/ && flag==1 && !/\(Actual/ { printf "%s (Actual: %.2f )\n",$0,$3-e; next }
- X/CPU/ && flag==1 && !/\(Actual/ { printf "%s (Actual: %.2f )\n",$0,$3-c; next }
- X { flag=0; print $0 }
- X ' $f > /tmp/Adj$$
- X if cmp $f /tmp/Adj$$ >/dev/null
- X then
- X echo No changes made.
- X else
- X chmod u+w $f
- X cp /tmp/Adj$$ $f
- X chmod u-w $f
- X fi
- X rm -f /tmp/Adj$$
- Xdone
- End-of-File-Grunt
- if test 764 -ne `cat 'Adjust' | wc -c`
- then
- echo 'shar: transmission error (expected 764 characters)'
- fi
- echo 'x - BSDtime.awk'
- if test -f 'BSDtime.awk'
- then
- echo 'shar: over-writing existing file BSDtime.awk'
- fi
- sed 's/^X//' > BSDtime.awk <<'End-of-File-Grunt'
- X# $Header: BSDtime.awk,v 3.4 87/06/22 14:27:07 kjmcdonell Beta $
- X/real/ { if (!fail) {
- X real+=$1; r2+=$1*$1; user+=$3; sys+=$5; c=$3+$5; c2+=c*c
- X ok++
- X }
- X iter++; fail=0; next
- X }
- X { print "** Iteration ",iter+1," Failed: ",$0; fail=1 }
- XEND {
- X if (fail) iter++
- X if (ok != iter) {
- X printf "For %d successful iterations from %d attempts ...\n",ok,iter
- X iter=ok
- X }
- X if (iter > 0) {
- X printf "Elapsed Time: %.2f seconds",real/iter
- X if (iter > 1) printf " (variance %.3f)",(r2-2*real*real/iter+real*real/iter)/(iter-1)
- X cpu=sys+user
- X printf "\nCPU Time: %.2f seconds [ %.2fu + %.2fs ]",cpu/iter,user/iter,sys/iter
- X if (iter > 1) printf " (variance %.3f)",(c2-2*cpu*cpu/iter+cpu*cpu/iter)/(iter-1)
- X print
- X } else {
- X print "Elapsed Time: -- no measured results!!"
- X print "CPU Time: -- no measured results!!"
- X }
- X }
- End-of-File-Grunt
- if test 867 -ne `cat 'BSDtime.awk' | wc -c`
- then
- echo 'shar: transmission error (expected 867 characters)'
- fi
- echo 'x - Config'
- if test -f 'Config'
- then
- echo 'shar: over-writing existing file Config'
- fi
- sed 's/^X//' > Config <<'End-of-File-Grunt'
- X#! /bin/sh
- X# $Header: Config,v 3.4 87/06/23 13:53:05 kjmcdonell Beta $
- X# sh script to extract useful configuration data
- Xif test $# -ne 1
- Xthen
- X echo "Usage: Config logfile"
- X exit 1
- Xfi
- Xtmp=/tmp/$$
- Xecho "MUSBUS - Site Configuration Data for $1"
- Xecho "" >>$tmp
- Xecho "Please answer the following questions ..."
- Xecho "CPU Make and Model Number?"
- Xread x
- Xecho "MC=\"$x\"" >>$tmp
- Xecho "Hardware options, e.g. floating point unit?"
- Xread x
- Xecho "OPT=\"$x\"" >>$tmp
- Xecho "Real Memory (M bytes)?"
- Xread x
- Xecho "MEM=\"$x\"" >>$tmp
- Xecho "Type of UNIX (Vendor name, AT&T System V, BSD 4.x, etc)?"
- Xread type
- Xecho "UNIX Version or Revision Level?"
- Xread version
- Xecho "UNIX=\"$type $version\"" >>$tmp
- Xecho "Disk Configuration (no. of spindles and their type(s))?"
- Xread x
- Xecho "DISKS=\"$x\"" >>$tmp
- Xcat $tmp $1 > ${tmp}a
- Xchmod u+w $1
- Xmv ${tmp}a $1
- Xchmod u-w $1
- Xrm -f ${tmp}*
- End-of-File-Grunt
- if test 853 -ne `cat 'Config' | wc -c`
- then
- echo 'shar: transmission error (expected 853 characters)'
- fi
- echo 'x - Groan'
- if test -f 'Groan'
- then
- echo 'shar: over-writing existing file Groan'
- fi
- sed 's/^X//' > Groan <<'End-of-File-Grunt'
- X#! /bin/sh
- X# $Header: Groan,v 3.4 86/12/24 08:56:45 kenj Beta $
- X# run MUSBUS multiuser test continuously
- Xrm -f nogroan
- Xn=1
- Xnusers="1 4 8 16 24 32 48 64"
- Xttys="/dev/ttyi11 /dev/ttyi34 /dev/ttyi03"
- Xdirs="/hon/Bench /tmp/Bench /u1/Bench"
- Xexport nusers ttys dirs
- Xfor t in $ttys
- Xdo
- X stty 9600 -tabs -raw -nl >$t &
- Xdone
- Xfor d in $dirs
- Xdo
- X if test -d $d
- X then
- X :
- X else
- X mkdir $d
- X echo $d created.
- X fi
- Xdone
- Xdate > log.groan
- Xwhile test ! -f nogroan
- Xdo
- X ./run >> log.groan 2>&1
- X echo "Groan: Major Iteration $n Completed" >> log.groan
- X n=`expr $n + 1`
- Xdone
- End-of-File-Grunt
- if test 550 -ne `cat 'Groan' | wc -c`
- then
- echo 'shar: transmission error (expected 550 characters)'
- fi
- echo 'x - Intro.nr'
- if test -f 'Intro.nr'
- then
- echo 'shar: over-writing existing file Intro.nr'
- fi
- sed 's/^X//' > Intro.nr <<'End-of-File-Grunt'
- X.\" This needs NO macro package, it is self-contained
- X.\" $Header: Intro.nr,v 3.12 87/09/16 07:24:45 kenj Exp $
- X.nr Pw 6.75i
- X.nr Po 0i
- X.ll \n(Pwu
- X.ev 2
- X.ll \n(Pwu
- X.lt \n(Pwu
- X.ev
- X.po -\n(Po
- X.hy 14
- X.nr II 0
- X.de SZ
- X.ps \\$1
- X.vs \\$1u*1.25p
- X..
- X.de NH
- X.in 0
- X.if t .sp 0.5v
- X.if n .sp
- X.ne 6v
- X.SZ 12
- X.ft B
- X\\$1 \\$2
- X.br
- X.ft P
- X.SZ 10
- X..
- X.de LP
- X.in \\n(IIu
- X.if t .sp 0.35v
- X.if n .sp
- X.ne 3v
- X..
- X.de IP
- X.LP
- X.in +4n
- X.ta 4n
- X.ti -4n
- X\\$1 \\c
- X..
- X.de PR
- X\\fI\\$1\\fP\\$2
- X..
- X.de FL
- X\\fB\\$1\\fP\\$2
- X..
- X.de SC
- X.ti +6n
- X.if t .HS
- X$ \\$1
- X.br
- X.if t .HE
- X..
- X.de SV
- X\\fI$\\$1\\fP\\$2
- X..
- X.de RS
- X.in +6n
- X..
- X.de RE
- X.in -6n
- X..
- X.de HS
- X.ft H
- X.ps -1
- X..
- X.de HE
- X.ps +1
- X.ft R
- X..
- X.de VA
- X.IP "\fIShell Variable:\fP \\fB\\$1\\fP (default: \\$2)"
- X.br
- X..
- X.de TN
- X.IP "\fITest Name:\fP \\fB\\$1\\fP"
- X.br
- X..
- X\&
- X.sp 1i
- X.de Fo
- X'Hd
- X..
- X.de Hd
- X.ev 2
- X.bp
- X.in 0
- X.sp
- X.tl 'MUSBUS Introduction''%.'
- X.sp
- X.ev
- X..
- X.wh -0.1i Fo
- X.ad c
- X.SZ 14
- X.ft B
- XAn Introduction to the Monash Benchmark Suite (MUSBUS)
- X.if t .sp 0.5v
- X.if n .sp
- X.SZ 12
- X.ft I
- XKen J. McDonell
- X.if t .sp 0.5v
- X.if n .sp
- X.SZ 10
- X.ft R
- XDepartment of Computer Science
- X.br
- XMonash University
- X.br
- XClayton, AUSTRALIA 3168
- X.sp
- XACSnet: kenj@moncskermit.oz
- X.br
- XUSENET: seismo!munnari!moncskermit.oz!kenj
- X.br
- XARPA: kenj%moncskermit.oz@seismo.arpa
- X.sp
- XRevised: 16 September, 1987
- X.br
- X.ad b
- X.NH 1 Introduction
- X.LP
- XThe Monash University Suite for Benchmarking
- XUNIX\v'-.5n'\(dg\v'+.5n'
- X.de DF
- X'FN
- X.rm DF
- X..
- X.wh -0.7i DF
- X.de FN
- X.ev 2
- X.in 0
- X.sp
- X\\l'1.5i\(ul'
- X.sp 0.5v
- X\v'-.5n'\(dg\v'+.5n' UNIX is a trademark of AT&T
- X.sp 2
- X.ev
- X.rm FN
- X.ch DF -0.01i
- X..
- XSystems (MUSBUS), has been developed
- Xto assist in
- X.IP (a)
- Xidentifying bottlenecks and performance problems in new
- XUNIX ports, and
- X.IP (b)
- Xproviding a robust test environment in which
- Xthe performance of competing
- XUNIX systems may be compared.
- X.LP
- XThis document provides an overview for \fBVersion\fP \fB5.0\fP of MUSBUS
- Xand is intended for knowledgeable programmers trying to run
- Xthe software on their own hardware.
- X.NH 2 Preliminaries
- X.NH 2.1 "Software Environment"
- X.LP
- XYou will require a system that supports Level 7, System V
- Xor BSD
- Xcompatibility, along with the following programs.
- X.RS
- X.PR sh
- X(the Bourne shell)
- X.br
- X.PR awk
- X.PR cat
- X.PR cc
- X.PR chmod
- X.PR comm
- X.PR cp
- X.PR date
- X.PR dc
- X.PR df
- X.PR echo
- X.PR ed
- X.PR expr
- X.PR kill
- X.PR ls
- X.PR make
- X.PR mkdir
- X.PR rm
- X.PR sed
- X.PR test
- X.PR time
- X.PR touch
- X.PR tty
- X.PR who
- X.RE
- X.NH 2.2 "Getting Started"
- X.LP
- XAll the files are distributed in a single directory.
- XOnce these have been retrieved from the distribution some initial housekeeping
- Xand system specifics have to be sorted out.
- X.LP
- XWhen fully installed, MUSBUS contains files in several subdirectories
- Xas follows,
- X.IP \(bu
- X.FL Results ,
- Xlog files created by the command procedure
- X.PR run .
- X.IP \(bu
- X.FL Tmp ,
- Xtemporary files created by
- X.PR run
- Xand friends.
- X.IP \(bu
- X.FL Tools ,
- Xpost processors to produce
- X.PR tbl
- Xinput from the log files.
- X.IP \(bu
- X.FL Workload ,
- Xdescriptions of the workload profile, all associated data files and some
- Xwork script manipulation tools.
- X.LP
- XTo explicitly
- Xcreate these directories and distribute the required files into the
- Xappropriate places you may
- X.SC "make install"
- Xhowever this will be done automatically by
- X.PR run
- Xas required.
- X.LP
- XThe file
- X.FL time.awk
- Xis used by the command procedure
- X.PR run
- Xto average the
- Xresults from several attempts to time a particular test and so
- Xdepends upon the format of output from
- X.PR /bin/time .
- XThe results from multiple timing attempts are held temporarily
- Xin the file
- X.FL Tmp/tmp.$$
- X(where $$ is the pid of the
- X.PR run
- Xshell).
- XTry
- X.SC "/bin/time date"
- Xand check the output from
- X.PR /bin/time .
- XIf it has a format like
- X.ti +4n
- X0.4 real 0.0 user 0.1 sys
- X.br
- Xthen
- X.SC "rm -f time.awk"
- X.SC "ln BSDtime.awk time.awk"
- X.LP
- XIf the
- X.PR /bin/time
- Xoutput looks like
- X.RS
- X.ta 8n
- X.nf
- Xreal 0:00.4
- Xuser 0:00.0
- Xsys 0:00.1
- X.fi
- X.RE
- Xthen
- X.SC "rm -f time.awk"
- X.SC "ln SysVtime.awk time.awk"
- X.LP
- XOtherwise create your own version of
- X.FL time.awk
- Xusing
- X.FL *time.awk
- Xas examples.
- X.LP
- XSome of the tests require system calls from the C code to measure
- Xsmall elapsed times.
- XThis is a real problem since there appears to be no
- Xuniversally correct way of doing this in the Unix
- Xworld.
- XThe particular source files are
- X.FL clock.c ,
- X.FL fstime.c
- Xand
- X.FL mem.c .
- XIn the
- X.FL Makefile ,
- Xensure that you have \fBone\fP of the following
- Xdefinitions included in the CFLAGS (in addition to the \(miO).
- X.RS
- X.ta 12n
- X.nf
- X.if t \fH\s-1\(miDSysV\s+1\fR you are using a System V brand of Unix
- X.if n \(miDSysV you are using a System V brand of Unix
- X.if t \fH\s-1\(miDBSD4v2\s+1\fR you are using a Berkeley 4.2 or 4.3 system
- X.if n \(miDBSD4v2 you are using a Berkeley 4.2 or 4.3 system
- X.if t \fH\s-1\(miDBSD4v1\s+1\fR you are using a Berkeley 4.1 system
- X.if n \(miDBSD4v1 you are using a Berkeley 4.1 system
- X.fi
- X.RE
- XFor example,
- X.ti +6n
- X.if t \fH\s-1CFLAGS = \(miO \(miDBSD4v2\s+1\fR
- X.if n CFLAGS = -O -DBSD4v2
- X.LP
- XIf \fBnone\fP of these systems
- Xis appropriate, the source files \fIwill not compile\fP
- Xand you will have to decide on appropriate alternative calls
- Xand coding to suit local conditions.
- X.LP
- XIf you don't have the public-domain random number generator \fIrandom\fP()
- Xremove the #defines for \fBrand\fP and \fBsrand\fP in
- X.FL mkperm.c.
- X.LP
- XCheck the
- X.FL HISTORY
- Xfile (if it exists) for notification of any changes, additions
- Xor problems that may have been made or fixed subsequent to the version
- Xof MUSBUS described in this document.
- X.LP
- XTry
- X.SC "make programs"
- Xto confirm that every necessary program can be compiled and
- Xloaded correctly.
- X.LP
- XNow attempt to run all the tests once (this takes roughly 20 minutes).
- XUsing the Bourne shell (\c
- X.PR /bin/sh ),
- X.SC "iterations=1"
- X.SC "nusers=1"
- X.SC "export iterations nusers"
- X.SC "./run"
- X.LP
- XThis should demonstrate
- Xthat all the
- X.PR sh,
- X.PR awk,
- X.PR sed
- Xand
- X.PR ed
- Xscripts
- Xcan be made to work.
- XVerification of the health of things to this point depends upon
- Xchecking the output from
- X.PR run
- Xto ensure that no nasty errors
- Xare reported, and in particular scrolling through the file
- X.FL Results/log .
- XEvery time
- X.PR run
- Xis used information is \f3appended\fP to
- X.FL Results/log
- Xand
- X.FL Results/log.work ,
- Xso make sure that these files are removed or renamed before you start
- Xto do anything serious.
- XThe contents of
- X.FL Results/log
- Xshould look something like
- X.LP
- X.RS
- X.nf
- X.HS
- XStart Benchmark Run (MUSBUS Version X.Y)
- X Tue Jun 23 17:18:21 EDT 1987 (long iterations 6 times)
- X 2 interactive users.
- X
- XArithmetic Test (type = arithoh): 1000 Iterations
- XElapsed Time: 0.44 seconds (variance 0.003)
- XCPU Time: 0.30 seconds [ 0.30u + 0.00s ] (variance 0.000)
- X
- XArithmetic Test (type = register): 1000 Iterations
- XElapsed Time: 3.36 seconds (variance 0.008)
- XCPU Time: 3.18 seconds [ 3.13u + 0.05s ] (variance 0.008)
- X
- X[ ... and lots more similar goodies ]
- X
- XOutput sent to ... /dev/ttyp0
- XDirectories for temporary files ... Tmp
- X
- X.nf
- X.ta 14n,+8n,+8n,+8n,+8n
- XFilesystem kbytes used avail capacity Mounted on
- X/dev/hp0a \07419 \06202 \0\0475 93% /
- X/dev/hp0g 38383 33296 \01248 96% /usr
- X/dev/hp1a \07419 \04169 \02508 62% /jnk
- X/dev/hp1b 15583 \03181 10843 23% /usr/spool
- X/dev/hp1g 38383 32579 \01965 94% /mnt
- X/dev/up1a \07471 \0\0\010 6713 \00% /tmp
- X
- XSIGALRM check: 12 x 5 sec delays takes 60.05 wallclock secs (error -0.08%)
- XSimulated Multi-user Work Load Test:
- X
- X1 Concurrent Users, each with Input Keyboard Rate 2 chars / sec
- XElapsed Time: 425.83 seconds (variance 0.125)
- XCPU Time: 27.20 seconds [ 17.30u + 9.90s ] (variance 0.013)
- X
- X 1 interactive users.
- XEnd Benchmark Run (Wed Jun 24 09:33:55 EDT 1987) ....
- X.HE
- X.fi
- X.RE
- X.LP
- XBeware of lines with the following formats, they indicate something
- Xis \fBwrong\fP.
- X.if t .IP "\fH\s-1** Iteration x Failed: text\fR\s+1"
- X.if n .IP "** Iteration x Failed: text"
- X.br
- XSomething (\fItext\fP) other than the normally anticipated output from
- X.PR /bin/time
- Xwas found in the file
- X.FL Tmp/tmp.$$ .
- X.if t .IP "\fH\s-1Elapsed Time: -- no measured results!!\fR\s+1";
- X.if n .IP "Elapsed Time: -- no measured results!!";
- X.br
- XNot a single valid timing result was found in
- X.FL Tmp/tmp.$$ .
- X.if t .IP "\fH\s-1Terminated during iteration n\fR\s+1"
- X.if n .IP "Terminated during iteration n"
- X.br
- XPremature termination of a test, usually as the result of
- Xa shell trap taken from
- X.PR run .
- XMost often this is symptomatic of an earlier
- Xerror reported in
- X.FL Results/log .
- X.if t .IP "\fH\s-1* Apparent errors from makework ... *\fR\s+1"
- X.if n .IP "* Apparent errors from makework ... *"
- X.br
- XAfter cleaning the log files from the multi-user test (using
- X.PR sed
- Xand the script
- X.FL check.sed )
- Xsome lines remained that probably indicate
- Xreal errors which forced the multi-user test to
- Xterminate prematurely.
- XDepending upon the formats of messages from programs (especially
- Xin the multi-user workload),
- X.FL check.sed
- Xmay need some local fine tuning to remove lines,
- Xthat do not reflect genuine error conditions, from
- Xthe log files.
- XIf this is not done,
- Xthe tests will be aborted prematurely based upon the classification
- Xof a spurious message as a real error condition.
- X.if t .IP "\fH\s-1Reason?: text\fR\s+1"
- X.if n .IP "Reason?: text"
- X.br
- X.PR Makework
- X(the controlling program for the multi-user test)
- Xhas detected an inconsistency and taken a fatal dive,
- X\fItext\fP comes from
- X.PR perror ()
- Xand the previous line in
- X.FL Results/log
- Xwill contain
- X.PR makework "'s"
- Xidea of what is wrong.
- X.if t .IP "\fH\s-1* Benchmark Aborted .... *\fR\s+1"
- X.if n .IP "* Benchmark Aborted .... *"
- X.br
- XJust what it says!
- X.LP
- XOther possible error reports in
- X.FL Results/log
- Xrelate to specific tests
- Xand are either self explanatory (e.g. missing or illegal program
- Xoptions) or described in the Sections below.
- X.LP
- XThe file
- X.FL Results/log.work
- Xcontains detailed logging of the multi-user test, and may contain
- Xuseful information in the event that this test fails or terminates
- Xprematurely.
- XBesides logging process ids and file descriptor assignments for each
- Xsimulated user's job stream, standard error output is trapped and
- Xreported in
- X.FL Results/log.work .
- X.NH 3 "The Tests"
- X.LP
- XIf you are serious about the results produced, these tests should
- Xbe run on a dedicated system without concurrent activity.
- XWhen possible, an idle system in mult-iuser mode is
- Xpreferable to a single user system.
- X.LP
- XAll the tests are controlled by shell variables used within the command
- Xprocedure
- X.PR run .
- XBy setting environment variables of the same name, the default values
- Xof the shell variables
- Xmay be over-ridden, however if the defaults are consistently wrong for
- Xparticular variables it is safer (i.e. less error prone) to modify
- Xthe defaults in
- X.PR run .
- X.LP
- X.PR Run
- Xdoes its work for the most part silently, logging information to
- Xcertain files, and providing a terse summary of the particular test(s)
- Xbeing run on the tty from which
- X.PR run
- Xwas invoked.
- X.LP
- XA designated test may by run using the command
- X.SC "./run thing"
- Xwhere \fIthing\fP is one of the test names described in the following
- XSections.
- XThe commands
- X.SC "./run"
- Xor
- X.SC "./run all"
- Xwill run everything.
- X.LP
- X.PR Run
- Xmay be interrupted from the keyboard (SIGINT)
- Xif it is started in foreground
- Xand after some fooling about it manages to shut things down and clean up files.
- X.PR run
- Xcreates a
- X.PR sh
- Xcommand procedure
- X.FL Tmp/kill_run
- Xthat may be used to shut down a background
- X.PR run
- Xvia
- X.SC "Tmp/kill_run"
- X.VA iterations 6
- XUnless otherwise stated,
- Xthis variable controls the number of times each test is repeated for timing.
- XAt the beginning of each iteration, the program
- X.FL iamalive
- Xwrites the iteration
- Xnumber (without newline or carriage return)
- Xon standard output.
- X.NH 3.1 "Raw Speed Measures"
- X.NH 3.1.1 "Specific Arithmetic"
- X.LP
- XThis family of tests computes the sum of a series of terms
- Xsuch that the arithmetic is unbiased towards operator type
- X(i.e. equal numbers of additions, subtractions, multiplications
- Xand divisions).
- XEach major loop in the computation involves summing 100 terms
- Xof the series.
- X.VA arithloop 1000
- XNumber of major loops in the computation.
- X.TN arithoh
- XDo not compute the series, so measures the overhead in the
- Xcomputation.
- X.TN register
- XArithmetic uses registers.
- X.TN short
- XArithmetic uses shorts.
- X.TN int
- XArithmetic uses ints.
- X.TN long
- XArithmetic uses longs.
- X.TN float
- XArithmetic uses floats.
- X.TN double
- XArithmetic uses doubles.
- X.LP
- XAfter all the arithmetic tests have been performed, the
- X.PR sh
- Xscript
- X.FL Tools/Adjust
- Xshould be used with
- X.FL Results/log ,
- Xi.e.
- X.SC "./Tools/Adjust Results/log"
- Xto compute the \fBactual\fP
- XCPU and elapsed times when the overhead measured by the test
- X.PR arithoh
- Xis subtracted.
- XIt is these times (i.e. \fIminus the startup and loop overhead\fP)
- Xthat have been published and circulated amongst MUSBUS users.
- XFailure to run the
- X.PR Tools/Adjust
- Xscript will make the machine
- Xyou are testing look comparatively worse
- Xthan it really is!
- XNote that
- X.PR Tools/Adjust
- Xwill be run automatically by the log file postprocessors (\c
- X.PR Tools/mktbl
- Xand
- X.PR Tools/mkcomp )
- Xif the times have not already been adjusted.
- XOnce the adjustment has been made, the relevant portion of
- X.FL Results/log
- Xshould look something like (note \fBActual\fP times in parentheses),
- X.LP
- X.RS
- X.nf
- X.HS
- XStart Benchmark Run (MUSBUS Version X.Y)
- X Tue Jun 23 17:18:21 EDT 1987 (long iterations 6 times)
- X 2 interactive users.
- X
- XArithmetic Test (type = arithoh): 1000 Iterations
- XElapsed Time: 0.44 seconds (variance 0.003)
- XCPU Time: 0.30 seconds [ 0.30u + 0.00s ] (variance 0.000)
- X
- XArithmetic Test (type = register): 1000 Iterations
- XElapsed Time: 3.36 seconds (variance 0.008) (Actual: 2.92 )
- XCPU Time: 3.18 seconds [ 3.13u + 0.05s ] (variance 0.008) (Actual: 2.88 )
- X
- X[ ... and lots more similar goodies ]
- X
- X.HE
- X.fi
- X.RE
- X.NH 3.1.2 "General Purpose Arithmetic"
- X.TN dc
- XCompute the square root of 2 to 99 decimal places using
- X.PR dc .
- XThe
- X.PR dc
- Xinput is in
- X.FL dc.dat .
- XThis test is due to John Lions (University of New South Wales) who
- Xhas suggested it as a good first order measure of raw system speed.
- X.NH 3.1.3 Recursion
- X.VA ndisk 17
- X.TN hanoi
- XA recursive solution to the classical Tower of Hanoi problem.
- XWork increases as 2**(number of disks).
- X.SV ndisk
- Xprovides a \fIlist\fP of the number of disks for a
- X\fBset\fP of problems, however the default setting is for a singular
- Xset.
- X.NH 3.1.4 "System Calls, Pipes, Forks, Execs and Context Switches"
- X.VA ncall 4000
- X.TN syscall
- XSit in a hard loop of
- X.SV ncall
- Xiterations, making 5 system calls
- Xper iteration.
- XThe system calls (\c
- X.PR dup (0),
- X.PR close (i),
- X.PR getpid (),
- X.PR getuid ()
- Xand
- X.PR umask (i))
- Xinvolve little work on the part of the UNIX kernel, so
- Xthe test predominantly measures the overhead associated with
- Xthe system call mechanism.
- X.VA io 2048
- X.TN pipe
- XOne process (therefore no context switching) that writes and reads
- Xa 512 byte block along a pipe
- X.SV io
- Xtimes.
- X.VA children 100
- X.TN spawn
- XSimply repeat
- X.SV children
- Xtimes; fork a copy of yourself and wait for
- Xthe child process to exit (which it should do immediately).
- X.VA nexecl 100
- X.TN execl
- XPerform
- X.SV nexecl
- Xexecs using
- X.PR execl ().
- XThe program to be exec'd has been artificially expanded to a reasonable
- Xsize (on a VAX, 11264 text + 2048 data + 24388 bss).
- X.VA switch1 500
- X.TN context1
- XPerform 2 x
- X.SV switch1
- Xcontext switches, using pipes for synchronization.
- XThe test involves 2 processes connected via 2 pipes.
- XOne process writes then reads a 4-byte (descending) sequence number, while
- Xthe other process reads then writes a sequence number.
- XSynchronization is validated at each swap by checking the values of the
- Xsequence numbers read and written.
- X.NH 3.1.5 "C Compilation and Loading"
- X.TN C
- XMeasure the time for each of
- X.SC "cc -c cctest.c"
- X.SC "cc cctest.o"
- Xwhere
- X.FL cctest.c
- Xcontains 124 lines of uninteresting C code (108
- Xlines of real code after
- X.PR cpp ).
- X.NH 3.1.6 "Memory Access Speed"
- X.LP
- XThese tests try to measure read accesses per real second into an array
- Xof integers.
- XBecause of inaccuracies in measuring small real times, the
- Xresults of this test are subject to large variances and
- Xcan not be interpreted with great confidence (e.g. negative
- Xand infinite speeds have been observed).
- XConsequently, these tests are best considered as a
- Xhistorical curiosities from the days when MMUs were bottlenecks on
- Xmicroporcessor-based systems, and \fBno\fP real significance should
- Xbe attached to the observed times.
- X.VA poke 100000
- XNumber of array accesses.
- X.VA arrays "8 64 512"
- XList of array sizes in units of 1024 ints.
- X.TN seqmem
- XCyclic sequential access pattern, hitting each element of the array
- Xin turn.
- X.TN randmem
- XRandom access patterns -- to give VM systems a chance to do something
- Xbetter!
- X.NH 3.1.7 "Filesystem Throughput"
- X.VA blocks "62 125 250 500"
- XA list of file sizes in Kbytes.
- X.VA where .
- XThe directory in which the files will be created.
- XThis test requires at least
- X2 x max(\c
- X.SV blocks )
- XKbytes of free space in the filesystem
- Xcontaining
- X.SV where .
- X.TN fstime
- XThis program attempts to measure file write time, file read time and
- Xfile copy time.
- XIt is assumed that BUFSIZ as defined in <stdio.h> is a good size for
- Xphysical i/o, and all i/o is done via direct calls to
- X.PR read ()
- Xand
- X.PR write ().
- XThis test is performed (\c
- X.SV iterations /2)
- Xtimes.
- X.LP
- XBeware of the \fIwrite\fP time, since this can be influenced by the size
- Xof the disk block cache in the kernel.
- XBefore the reads are commenced there are a couple of
- X.PR sync ()s
- Xand a 5 second sleep to try and flush the cache.
- XThe times for small files are most sensitive to disk block
- Xcaching.
- X.LP
- XReally the \fIcopy\fP time for the largest file
- Xis the best indicator of throughput and reflects
- Xthe type of disk activity most commonly generated by compilers, editors,
- Xassemblers, etc.
- XAlso the rates are measured against elapsed time, so there is some
- Xscope for variance however the absolute times are usually long enough
- Xto make this effect insignificant \fBprovided\fP
- Xthere is no concurrent disk activity on the same spindle!
- X.NH 3.2 "Emulated Multi-user Test"
- X.VA nusers "1 4 8 16 24 32"
- XA list of the number users to be emulated.
- X.VA ttys /dev/tty
- XA \fBlist\fP of tty devices
- Xwhere the simulated tty output is sent -- there is a lot of this, and
- Xyou should ensure that these tty lines are operating at the normal
- Xbaud rate (e.g. 9600) for the test system.
- XIf your CPU console does not use a standard serial multiplexer
- X(e.g. a VAX, Pyramid, Gould, DG, etc.), then the tty output
- Xshould be directed to \fIsome other\fP tty line(s) that \fBdo\fP use the
- Xordinary serial port hardware.
- X.VA dirs Tmp
- XA \fBlist\fP of directories that will be used to create subdirectories
- Xand temporary files to run the
- Xuser job streams from.
- X.VA rate 2
- XUsers are assumed to type at a rate of
- X.SV rate
- Xcharacters per second.
- X.TN work
- XOf all the tests in MUSBUS,
- Xthis is the by far the most complicated, most realistic and most likely
- Xto fail.
- XThis test is performed (\c
- X.SV iterations /2)
- Xtimes.
- X.LP
- XThe synthetic workload is created from a number of job streams, each
- Xof which is described by a line in the file
- X.FL Tmp/workload .
- XEach line consists of
- X.IP \(bu
- Xthe home directory for the job stream,
- X.IP \(bu
- Xthe full pathname of the program to run,
- X.IP \(bu
- Xoptional arguments to that program,
- X.IP \(bu
- Xan optional source
- Xof standard input to that program (a filename prefixed by ``<''), and
- X.IP \(bu
- Xan optional destination
- Xfor standard output from that program (a filename prefixed by ``>'').
- X.LP
- X.FL Tmp/workload
- Xis created automatically by the command script
- X.PR run
- Xbased upon
- X.IP (a)
- Xthe variables
- X.SV dirs
- Xand
- X.SV ttys , and
- X.IP (b)
- Xthe workload profile
- X.FL Workload/script.master
- Xfrom which the script interpreter program name is extracted
- Xand the individual input script files (\c
- X.FL Tmp/script.? ).
- X.LP
- XWhen
- X.FL Tmp/workload
- Xis constructed, a cyclic scheme
- Xis used to share user work amongst the
- Xavailable directories and tty lines (as per
- X.SV dirs
- Xand
- X.SV ttys ).
- XIn this way, serial i/o bottlenecks for large numbers of simulated
- Xusers, and unbalanced disk i/o across spindles may be avoided.
- XAs a dynamic check, the program
- X.PR ttychk
- Xis used within
- X.PR run
- Xto check for potential bandwidth limitations on the serial i/o
- Xlines, given the number of lines and the maximum number of job streams.
- X.LP
- XThe workload profile (\c
- X.FL Workload/script.master )
- Xhas the following format.
- X.IP 1.
- XThe first line must begin ``%W%'' followed by the full pathname of the
- Xrelevant interpreter and any required options.
- XFor example, if the script should be run by the Bourne shell, an
- Xappropriate specification would be
- X.RS
- X.HS
- X%W% /bin/sh -ie
- X.HE
- X.RE
- X.IP 2.
- XAll subsequent lines up to the first line beginning with ``%%''
- Xare preamble commands that must appear at the \f3beginning\fP of \f3every\fP
- Xscript.
- X.IP 3.
- XSequences of commands terminated by a line beginning with ``%%''
- Xconstitute a job step.
- XEach job step is an autonomous piece of work such that once the
- Xpreamble has been executed, job steps may be executed in \f3any\fP order.
- X.IP 4.
- XAny lines following the last ``%%'' line form a postscript
- Xthat must appear at the \f3end\fP of \f3every\fP
- Xscript.
- X.LP
- XThe command procedure
- X.PR mkscript
- Xand the program
- X.PR mkperm
- Xare used (by
- X.PR run )
- Xto create several (usually 4) scripts from
- X.FL Workload/script/master
- Xwith random permutations
- Xof the job steps.
- XThese scripts reside in
- X.FL Tmp/script.?
- Xand are assigned in a cyclic manner to create the job streams.
- XThe work for \fBeach\fP
- Xsimulated user is generated from
- X\fBone\fP job stream.
- X.LP
- XFor example the distributed
- X.FL Workload/script.master
- Xis
- X.LP
- X.RS
- X.nf
- X.if t .HS
- X.CK Workload/script.master
- X%W% /bin/sh -ie
- Xmkdir /tmp/$$ tmp
- X%% 1 edit
- X\&./keyb edscr1.dat | ed edit.dat
- X: .......................................................
- X: . This is some filler of about the same .
- X: . size as the file edscr1.dat, since the .
- X: . emulated input proceeds in parallel, and .
- X: . we want the real-time delay to be about right .
- X: .......................................................
- Xchmod u+w temporary
- Xrm temporary
- X%% 2 ls
- Xls -l
- X%% 3 cat
- Xcat cat.dat
- X%% 4 compile
- Xcc -c cctest.c 1>&2
- Xrm *.o
- X%% 5 edit, compile and link
- Xchmod 444 dummy.c
- X\&./keyb edscr2.dat | ed dummy.c
- X: . more textual and time filler for the second edscript file, edscr2.dat .
- Xcc dummy.c 1>&2
- Xrm a.* grunt.c
- X%% 6 grep
- Xgrep '[ ]*nwork' grep.dat
- X%% 7 file copying
- Xcp *.c edit.dat /tmp/$$
- Xcp /tmp/$$/* tmp
- X%%
- Xrm -rf tmp /tmp/$$
- X.if t .HE
- X.fi
- X.RE
- X.LP
- XThis generates several job streams one of which (\c
- X.FL Tmp/script.1 )
- Xcontains,
- X.LP
- X.RS
- X.nf
- X.if t .HS
- X.CK Tmp/script.1
- Xmkdir /tmp/$$ tmp
- Xcc -c cctest.c 1>&2
- Xrm *.o
- X\&./keyb edscr1.dat | ed edit.dat
- X: .......................................................
- X: . This is some filler of about the same .
- X: . size as the file edscr1.dat, since the .
- X: . emulated input proceeds in parallel, and .
- X: . we want the real-time delay to be about right .
- X: .......................................................
- Xchmod u+w temporary
- Xrm temporary
- Xcat cat.dat
- Xgrep '[ ]*nwork' grep.dat
- Xchmod 444 dummy.c
- X\&./keyb edscr2.dat | ed dummy.c
- X: . more textual and time filler for the second edscript file, edscr2.dat .
- Xcc dummy.c 1>&2
- Xrm a.* grunt.c
- Xcp *.c edit.dat /tmp/$$
- Xcp /tmp/$$/* tmp
- Xls -l
- Xrm -rf tmp /tmp/$$
- X.if t .HE
- X.fi
- X.RE
- X.LP
- XGiven the following environment variable assignments,
- X.RS
- X.nf
- Xnusers=8
- Xttys=/dev/ttyh0 /dev/ttyh8 /dev/ttyha
- Xdirs=Tmp /usr/tmp
- X.fi
- X.RE
- Xthe created workload description file (\c
- X.FL Tmp/workload )
- Xcontains
- X.LP
- X.RS
- X.nf
- X.if t .HS
- XTmp/user1 /bin/sh -ie <Tmp/script.1 >/dev/ttyh0
- X/usr/tmp/user2 /bin/sh -ie <Tmp/script.2 >/dev/ttyh8
- XTmp/user3 /bin/sh -ie <Tmp/script.3 >/dev/ttyha
- X/usr/tmp/user4 /bin/sh -ie <Tmp/script.4 >/dev/ttyh0
- XTmp/user5 /bin/sh -ie <Tmp/script.1 >/dev/ttyh8
- X/usr/tmp/user6 /bin/sh -ie <Tmp/script.2 >/dev/ttyha
- XTmp/user7 /bin/sh -ie <Tmp/script.3 >/dev/ttyh0
- X/usr/tmp/user8 /bin/sh -ie <Tmp/script.4 >/dev/ttyh8
- X.if t .HE
- X.fi
- X.RE
- X.LP
- XIt is strongly recommended that you create your own workload
- Xprofile for the multi-user test to reflect the anticipated
- Xsystem usage.
- XTo do this,
- X.IP 1.
- XUse the distributed files in the
- X.FL Workload
- Xdirectory as a guide.
- X.IP 2.
- XCreate a new
- X.FL Workload/script.master
- Xdescribing the required job steps.
- X.IP 3.
- XEnsure all required data files are in the
- X.FL Workload
- Xdirectory, because every job stream executes with the current
- Xdirectory containing its own private copies of \f3all\fP the
- Xfiles from
- X.FL Workload .
- X.IP 4.
- XEnsure the makefile (\c
- X.FL Workload/Makefile )
- Xhas the following targets defined (they are assumed to exist by
- X.PR run ).
- X.RS
- X.nr II 6n
- X.IP (a)
- Xcontext : ensure all files needed to run a script are present.
- X.IP (b)
- Xclean : remove any unnecessary temporary files, e.g. those created from
- Xsomewhere else during a ``make context''.
- X.IP (c)
- Xscript.out : run a script and trap all the output; the file
- X.FL script.out
- Xshould contain the concatenation of the script input and the
- Xscript output.
- XThis file is used by
- X.PR ttychk
- Xto compute the output tty bandwidth requirements.
- X.RE
- X.nr II 0
- X.LP
- XThe program
- X.PR makework
- Xreads the
- X.FL Tmp/workload
- Xfile and builds data structures
- Xfor each job stream (i.e. each simulated user) describing the home
- Xdirectory, command interpreter and its options and standard input and
- Xstandard output assignments.
- XThereafter
- X.PR makework
- Xstarts the user program(s) (\c
- X.PR /bin/sh
- Xabove) and pumps
- Xrandom chunks of input to them down pipes
- Xso that the aggregate rate across all simulated users does not exceed
- X.SV rate
- X\(mu
- X.SV nusers
- Xcharacters per second.
- X.LP
- XBecause of process creation limits, this test
- X\fBmust be run as root\fP.
- X.LP
- XBecause of open file limits,
- X.PR makework
- Xwill create \fIclones\fP of itself if
- Xthere are too many users for it to simulate alone.
- X.LP
- XIf the standard input files to the job streams invoke interactive
- Xprograms (e.g. \c
- X.PR ed ),
- Xthen substantial care must be taken that the data
- Xpumped down the pipe by
- X.PR makework
- Xends up at the correct destination.
- XThis has been the cause of some catastrophic problems in which only
- Xparts of the job streams have been run by
- X.PR /bin/sh
- Xand the rest has
- Xbeen sucked up and thrown away by
- X.PR /bin/ed .
- X.LP
- XTo try and avoid these problems, the program
- X.PR keyb
- Xhas been
- Xcreated to emulate one user typing at a terminal.
- X.PR keyb
- X(like
- X.PR makework )
- Xuses the environment variables
- X.SV rate
- Xand
- X.SV tty
- X(as set up by
- X.PR run )
- Xto know how fast to generate output and where the input
- Xshould be echoed to.
- X.LP
- XOnce
- X.PR run
- Xwork has finished, it is \fBessential\fP
- Xthat the following checks be performed.
- X.IP (1)
- XLook in the file
- X.FL Results/log .
- XCheck for wild variances in the execution times (a sign that not all job streams
- Xare being run to completion), and any obscure error messages that would
- Xhave been generated on stderr from
- X.PR makework .
- XMake sure that the execution times look reasonable.
- XOne easy check is that the CPU time for ``n'' users
- X\f2must be at least\fP
- X\&``n'' times the CPU time for one simulated user, since the CPU times
- Xshould be nearly the same for all users in a given run (although
- Xthe CPU time per user is expected to rise as the number of concurrent
- Xusers increases).
- X.IP (2)
- XCheck the file
- X.FL Results/log.work
- Xthat contains echoed comments, status information
- Xand shell error output from the simulated user work.
- X.nr II 4n
- X.LP
- XThe lines preceded by a line of the form ``Tmp/userlog.nnn:'' are copies of
- Xthe shell error output for simulated user ``nnn''.
- XThis should consist of a row of ``# ''s (assuming root's
- X.PR /bin/sh
- Xprompt is ``# '').
- X.LP
- XThe lines preceded by a line of the form ``Tmp/masterlog.nnn:'' are
- Xthe standard error output from master number ``nnn''.
- XMaster 0 is the real master
- X.PR makework
- Xprocess, the others are clones.
- XCheck that there are no messages of the forms,
- X.RS
- X.nf
- X.if t .HS
- Xmakework: cannot open %s for std output
- Xmakework: chdir to "%s" failed!
- Xuser %d job %d pid %d done exit code %d
- Xuser %d job %d pid %d done status 0x%x
- Xuser %d job %d pid %d done exit code %d status 0x%x
- Xclone %d done, pid %d exit code %d
- Xclone %d done, pid %d status 0x%x
- Xclone %d done, pid %d exit code %d status 0x%x
- Xuser %d job %d pid %d killed off
- X\&... reason ... pid %d killed off
- X.if t .HE
- X.fi
- X.RE
- X\fBAny\fP these messages indicate something has gone terribly wrong.
- X.LP
- XOn the other hand, messages of the form
- X.RS
- X.nf
- X.if t .HS
- Xmaster pid %d
- Xclone %d pid %d
- Xuser %d job %d pid %d pipe fd %d
- Xuser %d job %d pid %d done
- Xclone %d done, pid %d
- X.if t .HE
- X.fi
- X.RE
- Xare just warm reassurance that everything is going well.
- X.nr II 0
- X.NH 3.3 Miscellaneous
- X.TN x
- XLike ``run work'', except the initial filesystem status reporting,
- Xtty bandwidth check
- Xand clock checks are omitted.
- XUseful when using the multi-user test for diagnostic purposes, and the
- Xinitial housekeeping is not needed.
- X.NH 4 "The Complete Test"
- X.LP
- XWhen everything is apparently installed and operating correctly,
- Xlogin as root, choose another inactive terminal running at 9600 baud
- X(/dev/ttyx below) and start the whole charade as follows.
- X.SC tty=/dev/ttyx
- X.SC "export tty"
- X.SC "rm Report/log Report/log.work"
- X.SC "./run &"
- X.LP
- XOn a 4 Mbyte VAX 11/780, simulating 1, 4, 8, 16, 24 and 32
- Xusers in the multi-user test, this takes about 5 hours to run!
- X.NH 5 "What Does It All Mean?"
- X.LP
- XFinally one should be in a position to contemplate the summaries in
- Xthe
- X.FL Results/log
- Xfile.
- XLook in
- X.FL Tools
- Xfor the scripts
- X.PR mktbl
- Xand
- X.PR mkcomp
- Xto create
- X.PR tbl
- Xinput directly from the log files
- Xfor a single system or to compare two systems.
- XThis is most useful in comparison to the same tests run on another
- Xsystem, or on another version of the same system.
- X.LP
- XLots of things can influence the results, and people interpreting
- Xthe results should be aware of the following (probably incomplete)
- Xlist.
- X.IP (1)
- XAvailable real memory for the disk block cache and user processes.
- X.IP (2)
- XThe physical disk hardware; number and type of spindles, controller
- Xtype and paths to devices.
- X.IP (3)
- XThe logical disk arrangement; allocation of critical directories such
- Xas
- X.PR /tmp ,
- X.PR /usr
- Xand user filesystem across physical devices, the number
- Xand distribution of swap partitions.
- X.IP (4)
- XStandard of C compiler and optimizer; everything tested is written
- Xin C, any improvements here will help everything (even the kernel!).
- X.IP (5)
- XPhysical block size for swapping and paging; some of the test programs
- Xare very small and so may incur large physical i/o costs.
- X.IP (6)
- XFlavour of UNIX you are using.
- X.IP (7)
- XThe accuracy of real time measurements and flow control in
- X.PR makework .
- XCheck the output from
- X.PR clock
- Xin
- X.FL Results/log
- Xat the start of the multi-user
- Xtest to determine the extent to which a controlling SIGALRM loop
- Xmeasures wallclock time -- this can influence elapsed time in the
- Xmulti-user test particularly.
- X.NH 6 "Caveat Emptor"
- X.LP
- XThe MUSBUS tests have been widely distributed, and in some cases
- Xtheir owners have not treated them kindly.
- XThe following list details known pitfalls in running the tests
- Xand the subsequent application of the results.
- X.IP (1)
- XThere are several versions of the test suite, Version 3.3 (and later
- Xversions) in particular
- Xare very different to earlier versions and results obtained
- Xwith different versions of the suite cannot be meaningfully
- Xcompared.
- XI make no claim for the long-term
- Xstability of MUSBUS, and so this evolutionary
- Xprocess is likely to continue with future releases of the test suite.
- X.IP (2)
- XThere is \fBno\fP reason to suspect that the distributed workload
- Xfor the multi-user test (i.e. the files
- X.FL Tmp/script.?
- Xand
- X.FL Tmp/workload )
- Xare representative of the user work profile at \fByour\fP installation(s).
- XBe prepared to alter or rebuild the workload to reflect your
- Xexpected system usage.
- X.IP (3)
- XResults have been known to vary
- Xdramatically between releases of the UNIX you
- Xare testing.
- XThis reflects vendor tuning (sometimes breaking) of the UNIX port
- Xand MUSBUS is a useful diagnostic tool in this area, provided the
- XMUSBUS version and workload profile remain fixed.
- X.IP (4)
- XPoints (1) to (3) suggest that uncontrolled and uninformed
- Xcomparisons of
- XMUSBUS results is dangerous in the extreme.
- XThis is the main reason that I have not published the large
- Xcollection of results accumulated to date.
- X.IP (5)
- XRemember that the tests described in Section 3.1 are intended
- Xfor \fBdiagnostic\fP use.
- XIf you are interested in \fBperformance\fP, you should focus
- Xupon the multi-user test described in Section 3.2.
- X.IP (6)
- XBeware of simulating \fBtoo few\fP users in the multi-user
- Xtest.
- XUseful information about system throughput and performance
- Xunder heavy load conditions can usually be obtained by
- Xextrapolation of various measures computed from the
- XCPU and elapsed times for the multi-user tests with
- Xvarious numbers of users.
- XHowever this assumes the machine has been sufficiently loaded to
- Xmove out of the \fIlinear\fP part of the performance curves.
- XFor very fast machines, this may require emulation of
- Xa \fIlarge\fP number of users in the multi-user test.
- X.IP (7)
- XBeware of simulating \fBtoo many\fP users in the multi-user
- Xtest.
- XUsing the default value for
- X.SV ttys ,
- X\fBall\fP simulated
- Xtty output is directed to a \fIsingle\fP serial port.
- XAs you increase the number of simulated users in the multi-user
- Xtest (in response to Point (6) above) the serial port
- Xbandwidth may become the limiting resource!
- XThis is easy to fix by adding a list of more tty devices to the
- Xvalue of
- X.SV ttys .
- X.IP (8)
- XBe warned that the multi-user test has ``broken'' several UNIX
- Xports.
- XCauses have been identified as implementation (configuration)
- Xlimits in the system being tested (e.g. proc slots), real
- Xbugs in the port or MUSBUS errors.
- XThis list is basically in order of decreasing probability.
- X.LP
- XCommunication on MUSBUS experiences is welcomed at the
- Xelectronic addresses on the first page of this document.
- XIf you have found a problem, or can suggest a better testing
- Xtechnique please let me know, so that future versions might
- Xoffer real (as opposed to cosmetic) enhancements.
- End-of-File-Grunt
- if test 33901 -ne `cat 'Intro.nr' | wc -c`
- then
- echo 'shar: transmission error (expected 33901 characters)'
- fi
- echo 'x - Makefile'
- if test -f 'Makefile'
- then
- echo 'shar: over-writing existing file Makefile'
- fi
- sed 's/^X//' > Makefile <<'End-of-File-Grunt'
- X# MUSBUS Makefile
- X# $Header: Makefile,v 3.18 87/09/17 06:35:58 kenj Exp $
- XCFLAGS = -O -DBSD4v2
- XPROGS = arithoh register short int long float double hanoi \
- X randmem seqmem fstime \
- X syscall context1 pipe spawn execl makework keyb \
- X iamalive limit clock precision ttychk mkperm
- XMOSTPROGS = arithoh register short int long float double hanoi \
- X randmem seqmem fstime \
- X syscall context1 pipe spawn execl limit precision \
- X mkperm
- XDATAFILES = BSDtime.awk Groan Intro.nr SysVtime.awk \
- X check.sed cleanup dc.dat fs.awk mem.awk \
- X mkscript run time.awk README
- XSOURCES = arith.c mem.c fstime.c syscall.c context1.c pipe.c spawn.c \
- X big.c execl.c makework.c util.c getwork.c keyb.c iamalive.c \
- X limit.c clock.c precision.c ttychk.c mkperm.c makework.h \
- X cctest.c hanoi.c \
- X mkdistrib mkinstall musbus.1
- XTOOLS = Adjust Config comptbl.1 comptbl.2 comptbl.3 comptbl.4 comptbl.5 \
- X mk1 mk2 mkcomp mktbl tbl.1 tbl.2 tbl.3 tbl.4 tbl.5
- XWORKS = Makefile,1 cat.dat dummy.c edit.dat edscr1.dat edscr2.dat \
- X grep.dat mkprofile mkscript.out script.master
- XMANIFESTS = Workload.files Results.files Tools.files
- XXSCRIPTS = Tools/Adjust Tools/Config Tools/mk1 Tools/mk2 Tools/mkcomp \
- X Tools/mktbl \
- X Workload/mkprofile Workload/mkscript.out \
- X Groan cleanup mkdistrib mkinstall mkscript run
- X# Create all the binaries
- Xprograms: source $(PROGS)
- Xsource: $(SOURCES) $(DATAFILES)
- Xinstall:
- X @chmod 755 mkinstall
- X ./mkinstall
- X @chmod 755 $(XSCRIPTS)
- Xunrcs: $(SOURCES) $(DATAFILES) $(TOOLS) $(WORKS) $(MANIFESTS)
- X# Workload scripts
- Xscript: Tmp Tmp/script.1 Tmp/script.out
- X# Individual programs
- Xarithoh: arith.c
- X cc -o arithoh ${CFLAGS} -Darithoh arith.c
- Xregister: arith.c
- X cc -o register ${CFLAGS} -Ddatum=register arith.c
- Xshort: arith.c
- X cc -o short ${CFLAGS} -Ddatum=short arith.c
- Xint: arith.c
- X cc -o int ${CFLAGS} -Ddatum=int arith.c
- Xlong: arith.c
- X cc -o long ${CFLAGS} -Ddatum=long arith.c
- Xfloat: arith.c
- X cc -o float ${CFLAGS} -Ddatum=float arith.c
- Xdouble: arith.c
- X cc -o double ${CFLAGS} -Ddatum=double arith.c
- Xhanoi: hanoi.c
- X cc -o hanoi ${CFLAGS} hanoi.c
- Xrandmem: mem.c
- X cc -o randmem ${CFLAGS} -Dawk -Drandom mem.c
- Xseqmem: mem.c
- X cc -o seqmem ${CFLAGS} -Dawk mem.c
- Xfstime: fstime.c
- X cc -o fstime ${CFLAGS} -Dawk=1 fstime.c
- Xsyscall: syscall.c
- X cc -o syscall ${CFLAGS} syscall.c
- Xcontext1: context1.c
- X cc -o context1 ${CFLAGS} context1.c
- Xpipe: pipe.c
- X cc -o pipe ${CFLAGS} pipe.c
- Xspawn: spawn.c
- X cc -o spawn ${CFLAGS} spawn.c
- Xexecl: execl.c big.c
- X cc -o execl ${CFLAGS} execl.c
- Xmakework: makework.o util.o getwork.o
- X cc -o makework $(CFLAGS) makework.o util.o getwork.o
- Xmakework.o: makework.c makework.h
- Xutil.o: util.c makework.h
- Xgetwork.o: getwork.c makework.h
- Xkeyb: keyb.c
- X cc -o keyb ${CFLAGS} keyb.c
- Xiamalive: iamalive.c
- X cc -o iamalive ${CFLAGS} iamalive.c
- Xlimit: limit.c
- X cc -o limit ${CFLAGS} limit.c
- Xclock: clock.c
- X cc -o clock ${CFLAGS} clock.c
- Xprecision: precision.c
- X cc -o precision ${CFLAGS} precision.c
- Xttychk: ttychk.c
- X cc -o ttychk ${CFLAGS} ttychk.c
- Xmkperm: mkperm.c
- X cc -o mkperm ${CFLAGS} mkperm.c
- XTmp/script.1: Workload/script.master mkperm mkscript
- X ./mkscript 4 Workload/script.master
- X rm -f Tmp/script.[1-4]
- X mv script.[1-4] Tmp
- XTmp/script.out: Workload/script.master
- X cd Workload ; make script.out
- X rm -f Tmp/script.out
- X mv Workload/script.out Tmp
- X# Clean out the unnecessary stuff before the multi-user test
- Xinitwork: clean
- X /bin/rm -f *.o core a.out ${MOSTPROGS}
- X# Housekeeping
- Xprint:
- X pr run *.c cleanup *.awk *.sed workload script.master edscript.? | lpr
- Xmodes:
- X chmod 444 *.c *.awk
- X cd Work ; chmod 444 *.c *.dat script.* workload
- X chmod 444 Intro.nr Makefile check.sed
- X chmod 555 Config Groan cleanup run
- Xclean: Tmp
- X @cd Tmp ; /bin/rm -f a.out core *.o *.tmp ed.hup script.?.time
- X @cd Tmp ; /bin/rm -f masterlog.* userlog.* loggederrs
- Xpurge: clean
- X @/bin/rm -f *.o core a.out ${PROGS}
- X @cd Tmp ; /bin/rm -rf *
- XTmp:
- X @mkdir Tmp
- X.DEFAULT:
- X co $@
- End-of-File-Grunt
- if test 3857 -ne `cat 'Makefile' | wc -c`
- then
- echo 'shar: transmission error (expected 3857 characters)'
- fi
- echo 'x - Makefile,1'
- if test -f 'Makefile,1'
- then
- echo 'shar: over-writing existing file Makefile,1'
- fi
- sed 's/^X//' > Makefile,1 <<'End-of-File-Grunt'
- X# $Header: Workload.make,v 1.1 87/06/23 15:14:00 kjmcdonell Beta $
- XDUMMY = aa.1.dat aa.2.dat aa.3.dat aa.4.dat aa.5.dat aa.6.dat \
- X mm.1.dat mm.2.dat mm.3.dat mm.4.dat mm.5.dat mm.6.dat \
- X zz.1.dat zz.2.dat zz.3.dat zz.4.dat zz.5.dat zz.6.dat
- XDATA = cat.dat cctest.c dummy.c edit.dat edscr1.dat edscr2.dat \
- X grep.dat script.master
- X
- Xcontext: $(DATA) $(DUMMY) keyb
- X
- Xclean:
- X rm -f $(DUMMY) core script.? script.out workload keyb cctest.c
- X rm -rf .tmp
- X
- Xscript.out: script.master
- X ./mkscript.out
- X
- X$(DUMMY):
- X touch $@
- X
- Xkeyb: ../keyb
- X cp ../keyb keyb
- X../keyb:
- X cd .. ; make keyb
- Xcctest.c: ../cctest.c
- X cp ../cctest.c .
- X../cctest.c:
- X cd .. ; make cctest.c
- X
- X.DEFAULT:
- X co ../RCS/$@,v
- End-of-File-Grunt
- if test 676 -ne `cat 'Makefile,1' | wc -c`
- then
- echo 'shar: transmission error (expected 676 characters)'
- fi
- echo 'x - README'
- if test -f 'README'
- then
- echo 'shar: over-writing existing file README'
- fi
- sed 's/^X//' > README <<'End-of-File-Grunt'
- XMUSBUS - Monash University Software for Benchmarking Unix Systems
- X
- XMUSBUS Version 5.0 -- Installation Notes
- X
- X1) make install
- X - creates relevant subdirectories and moves files about
- X - if the distribution has already been unpacked, this
- X will do nothing, so it cannot hurt!
- X
- X2) Format and read the installation notes and user guide, as in
- X
- X [tn]roff Intro.nr | ...
- X
- X3) Follow the instructions therein.
- X
- X4) Note that the distributed workload profile (Workload/* when unpacked)
- X may not be representative of your system's current or anticipated
- X user profile, in which case the scripts and data files should be
- X changed -- see Intro.nr for details and implications.
- End-of-File-Grunt
- if test 672 -ne `cat 'README' | wc -c`
- then
- echo 'shar: transmission error (expected 672 characters)'
- fi
- echo 'x - Results.files'
- if test -f 'Results.files'
- then
- echo 'shar: over-writing existing file Results.files'
- fi
- sed 's/^X//' > Results.files <<'End-of-File-Grunt'
- Xlog.785
- Xlog.sun3-50
- Xlog.uVaxII
- End-of-File-Grunt
- if test 31 -ne `cat 'Results.files' | wc -c`
- then
- echo 'shar: transmission error (expected 31 characters)'
- fi
- echo 'x - SysVtime.awk'
- if test -f 'SysVtime.awk'
- then
- echo 'shar: over-writing existing file SysVtime.awk'
- fi
- sed 's/^X//' > SysVtime.awk <<'End-of-File-Grunt'
- X# $Header: SysVtime.awk,v 3.4 87/06/22 14:27:23 kjmcdonell Beta $
- X/^[Rr]eal/ {
- X if (!fail) {
- X l=length($2); m=substr($2,1,l-5); s=substr($2,l-3,4)
- X t=m*60+s; real+=t; r2+=t*t; ok++
- X }
- X iter++; fail=0; next }
- X/^[Uu]ser/ {
- X l=length($2); m=substr($2,1,l-5); s=substr($2,l-3,4)
- X t=m*60+s; user+=t; cpu=t; next }
- X/^[Ss]ys/ {
- X l=length($2); m=substr($2,1,l-5); s=substr($2,l-3,4)
- X t=m*60+s; sys+=t; c2+=(cpu+t)*(cpu+t); next }
- X/^$/ { next }
- X { print "** Iteration ",iter+1," Failed: ",$0; fail=1 }
- XEND {
- X if (fail) iter++
- X if (ok != iter) {
- X printf "For %d successful iterations from %d attempts ...\n",ok,iter
- X iter=ok
- X }
- X if (iter > 0) {
- X printf "Elapsed Time: %.2f seconds",real/iter
- X if (iter > 1) printf " (variance %.3f)",(r2-2*real*real/iter+real*real/iter)/(iter-1)
- X cpu=sys+user
- X printf "\nCPU Time: %.2f seconds [ %.2fu + %.2fs ]",cpu/iter,user/iter,sys/iter
- X if (iter > 1) printf " (variance %.3f)",(c2-2*cpu*cpu/iter+cpu*cpu/iter)/(iter-1)
- X print
- X } else {
- X print "Elapsed Time: -- no measured results!!"
- X print "CPU Time: -- no measured results!!"
- X }
- X }
- End-of-File-Grunt
- if test 1113 -ne `cat 'SysVtime.awk' | wc -c`
- then
- echo 'shar: transmission error (expected 1113 characters)'
- fi
- echo 'x - Tools.files'
- if test -f 'Tools.files'
- then
- echo 'shar: over-writing existing file Tools.files'
- fi
- sed 's/^X//' > Tools.files <<'End-of-File-Grunt'
- XAdjust
- XConfig
- Xcomptbl.1
- Xcomptbl.2
- Xcomptbl.3
- Xcomptbl.4
- Xcomptbl.5
- Xmk1
- Xmk2
- Xmkcomp
- Xmktbl
- Xtbl.1
- Xtbl.2
- Xtbl.3
- Xtbl.4
- Xtbl.5
- End-of-File-Grunt
- if test 115 -ne `cat 'Tools.files' | wc -c`
- then
- echo 'shar: transmission error (expected 115 characters)'
- fi
- echo 'x - Workload.files'
- if test -f 'Workload.files'
- then
- echo 'shar: over-writing existing file Workload.files'
- fi
- sed 's/^X//' > Workload.files <<'End-of-File-Grunt'
- XMakefile,1
- Xcat.dat
- Xdummy.c
- Xedit.dat
- Xedscr1.dat
- Xedscr2.dat
- Xgrep.dat
- Xmkprofile
- Xmkscript.out
- Xscript.master
- End-of-File-Grunt
- if test 104 -ne `cat 'Workload.files' | wc -c`
- then
- echo 'shar: transmission error (expected 104 characters)'
- fi
- echo 'x - arith.c'
- if test -f 'arith.c'
- then
- echo 'shar: over-writing existing file arith.c'
- fi
- sed 's/^X//' > arith.c <<'End-of-File-Grunt'
- X
- X/*
- X * arithmetic test
- X *
- X * $Header: arith.c,v 3.5 87/08/06 08:11:18 kenj Exp $
- X */
- X
- Xmain(argc, argv)
- Xint argc;
- Xchar *argv[];
- X{
- X int iter;
- X int i;
- X#ifndef arithoh
- X datum x, y, z;
- X#endif
- X
- X if (argc != 2) {
- X printf("Usage: %s count\n", argv[0]);
- X exit(1);
- X }
- X
- X iter = atoi(argv[1]);
- X
- X while (iter-- > 0) {
- X#ifndef arithoh
- X z = 0;
- X#endif
- X /*
- X * 101
- X * sum i*i/(i*i-1)
- X * i=2
- X */
- X for (i=2; i<=101; i++) {
- X#ifndef arithoh
- X x = i;
- X y = x*x;
- X z += y/(y-1);
- X#endif
- X }
- X }
- X exit(0);
- X}
- End-of-File-Grunt
- if test 512 -ne `cat 'arith.c' | wc -c`
- then
- echo 'shar: transmission error (expected 512 characters)'
- fi
-